package com.youngwang.generic;

import com.youngwang.generic.impl.GenericImpl;
import com.youngwang.lambda.Person;

/**
 * 泛型测试
 * 泛型的声明，必须在方法的修饰符（public,static,final,abstract等）之后，返回值声明之前。
 * @author youngwang
 * Date: 2016/10/13
 */
public class TestGeneric<T> {

    private T obj;

    public T getObj() {
        return obj;
    }
    public TestGeneric(){}

    public TestGeneric(T obj){
        this.obj = obj;
    }

    public void setObj(T obj) {
        this.obj = obj;
    }

    public static <T> void display(T t){
        System.out.println(t.getClass());
    }

    public static <T extends Number> double add(T num1,T num2){
        return num1.doubleValue() + num2.doubleValue();
    }
    public static void main(String[] args){
        TestGeneric<Person> personTestGeneric = new TestGeneric<>(new Person("W","Y",23));
        System.out.println(personTestGeneric.getObj().getFirstName());
        System.out.println(personTestGeneric.getObj().getLastName());
        System.out.println(personTestGeneric.getObj().getAge());
        System.out.println(add(12,21));
        GenericImpl<String> stringGeneric = new GenericImpl<>();
        String string = stringGeneric.show("abc");
        System.out.println(string);
        display("123");
        display(123);
        display(123f);
    }
}
